class Stack<T> {
  private data: T[] = []

  /**
   * 元素入栈
   * @param element
   */
  push(element: T) {
    this.data.push(element)
    return this.size()
  }

  /**
   * 元素出栈
   */
  pop(): T {
    return this.data.pop()
  }

  /**
   * 返回栈顶元素
   */
  peek() {
    const index = this.data.length - 1
    return this.data[index]
  }

  /**
   * 栈内元素数量
   */
  size() {
    return this.data.length
  }

  /**
   * 栈是否为空
   */
  isEmpty() {
    return this.size() === 0
  }

}

export default Stack
